課程資訊
課程名稱
計算機程式設計
Computer Programming 
開課學期
108-2 
授課對象
 
授課教師
鄭士康 
課號
EE3031 
課程識別碼
901 33920 
班次
 
學分
3.0 
全/半年
半年 
必/選修
 
上課時間
星期五7,8,9(14:20~17:20) 
上課地點
博雅301 
備註
A6:量化分析與數學素養
總人數上限:100人 
Ceiba 課程網頁
http://ceiba.ntu.edu.tw/1082EE3031_ 
課程簡介影片
 
核心能力關聯
核心能力與課程規劃關聯圖
課程大綱
為確保您我的權利,請尊重智慧財產權及不得非法影印
課程概述

注意: 本課程須投入甚多時間撰寫程式與報告, 課程負擔由輕而重, 至期末時達最高峰, 課業繁重或無決心毅力之同學請慎重考慮.

注意: 本課程鼓勵同學自組1至3人之團隊, 合作完成期末專題程式, 且各團隊期末專題程式成績即各成員共同之期末專題程式成績,占學期成績之30%. 因此務必慎選夥伴,若有重大合作困難,請及早反應處理.

注意: 除非考卷或作業批改登記發生錯誤,絕不更改成績.

注意: 本學期另有其他通識電腦程式設計課程, 內容與要求與本課程不同, 同學可以參考比較.


注意: 本課程使用程式整合開發環境(Integrated Development Environment, IDE) Microsoft Visual Studio 2017, 請由校計中官網授權軟體下載處下載安裝. 此一開發環境較適合於Windows系統下執行. 教學影片及教師自撰的對應教科書內容也是以 Microsoft Visual Studio 2017 為解說工具.
為顧及使用蘋果或其他作業系統的同學, 本課程的上課投影片教材, 將有Microsoft Visual Studio 2017及 Visual Studio Code兩個版本. Visual Studio Code 是一套跨平台(Windows x64, MacOS, Linux x64)的程式整合開發環境. 請由官網 https://code.visualstudio.com/下載安裝. 兩種開發環境繁簡不同. 然而, 對一般基礎計算機程式語言的學習而言, 熟悉一種開發環境已經足夠. 兩種IDE最主要的差別只是 Visual Studio Code 不支援Windows Form 圖形使用介面(GUI)程式, 必須改用其他方法, 例如Unity (同時適用於Visual Studio 2017及 Visual Studio Code), 撰寫 GUI 程式. 此外, Unity 也將在最後一週課程, 用來開發初階計算機圖學與互動(含其遊戲應用)程式.

注意:據之前助教經驗: 用平板來進行程式設計時, 須將鍵盤呈現在螢幕上. 想看螢幕畫面就得犧牲打字的便利性, 想打得順就看不到螢幕, 這是平板電腦先天的限制. 因此不推薦使用無實體鍵盤的平板電腦來撰寫程式.

課程緣起:
進入資訊科技時代,電腦程式設計已可說是未來「數位公民」應有的基本學養. 賈伯斯早在1995年就主張: "所有美國人都應該學程式,學習一門程式語言,學程式教你如何思考,就像學法律一樣。並不是要大家都去學法律,但法律教你一種思考方式,而程式帶給你另外一種思考方式。我認為電腦科學應該作為基本教育,每個人都應該花一年時間學習它"(http://www.inside.com.tw/2013/05/08/steve-jobs-the-lost-interview)。

國外知名大學多已對非理工科系開設相關課程, 因此台大開始推動普及電腦程式設計課程,增添助教人力, 要求確實實作, 增強同學們在資訊時代的競爭力。

本課程同時參與莊榮輝副校長推動之虛實整合的「混成教學」(Virtual Instruction and on-Site Teaching in Action,簡稱VISTA),以期提高教學影響力和學生的學習成效。

「遠距混成教學」(Virtual Instruction and on-Site Teaching in Action,簡稱VISTA)的一部分課程為數位影片遠距課程,另一部分課程為教學助理TA帶領的實體討論課程。本課程預計將有兩三個學校參加:實體課程教室,開設於不同學校,由各校教學助理TA帶領實體討論。學生在每次實體討論課之前,自行上網收看任課教師的講課影片。如此結合數位影音與教學助理TA,實地與學生互動進行翻轉教學、督促學習進度。

教學內容:
本課程以C#為例,由基本觀念循序漸近,介紹計算機程式的語法與程式設計撰寫要領。Part I適合初學者,Part II引入物件觀念,則程度較好同學亦能有所收獲。修完本課程後,即有能力學習其他各種計算機語言之程式設計,或學習使用特定軟體工具,開發包括網路應用及手機APP等實用程式。

課程主要內容分章如下:
1.教學計畫及C#簡介
Part I. 函式
2.整合發展環境初步與簡易C#程式
3.實值變數與運算式
4.流程控制
5.陣列
6.函式
7.程式規劃與函式導向程式設計 (函式導向指分解工作為階層結構之多個函式, 並非計算機科學所稱之Functional Programming)
Part II. 物件
8.物件與類別
9.物件導向程式設計
10.繼承與多型
11.檔案讀寫與例外處理
12.基礎視窗程式設計: Windows Form(影片及投影片)或 Unity(投影片)
Unity遊戲程式設計

上課方式:
請同學每週五上課前先看過當週進度的預錄講課影片,可以在課堂教室以外地方看,也可以每週五上課第七節(下午2:20~3:20),到教室觀看並自行與同學討論。但請注意: 每週講授的影片總長度大約有三小時, 一節課的時間通常看不完. 所以請盡量在上課前就把當日進度的影片看過一遍.
每星期五第八、九節(下午3:30~5:20),由助教群帶領進行討論,進行各種教學活動,例如分組搶答、分組相互出題挑戰等,同時解答同學問題,協助解決實作過程遇到的困難。建議同學自備筆記型電腦來教室。
助教群每週會出一不計分題目,供同學回家練習,完成之解答程式專案,可壓縮後由CEIBA上傳,助教群在下一週講解, 並釐清更正同學解答中共通性之錯誤。課後亦鼓勵同學自行完成教科書中每章後之練習,以加深學習效果。可參考教材中對應的解答,有關問題亦可請教助教。
此外,助教群將在臉書開設社團, 同學們學習的過程遇到的困難、或學習心得,都可以課外在社團發表, 並與助教們討論.

同時請注意期中考後, 內容難度開始增加, 課外需要花更多時間實作, 預習及複習, 才可能學好. 如果有幾週沒能好好看講課影片及實作複習, 很容易跟不上.


近年本課程網址:
https://ceiba.ntu.edu.tw/1072EE3029_
https://ceiba.ntu.edu.tw/1062EE3029_
https://ceiba.ntu.edu.tw/1051EE3029_
https://ceiba.ntu.edu.tw/1042EE4052_
https://ceiba.ntu.edu.tw/1032EE4052_
https://ceiba.ntu.edu.tw/1022EE4052_
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2012Spring.htm
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2011Spring.htm
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2010Spring.htm
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2009Spring.htm
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2008Spring.htm
http://cc.ee.ntu.edu.tw/~skjeng/ComputerProgramming2007Spring.htm

 

課程目標
訓練學生能夠利用C#語言寫作計算機程式, 並從中學習資訊時代解決問題的新方法. 包括問題辨識定義, 解法規畫, 邏輯表示與偵錯, 及過程與結果呈現之表達等能力. 願意組隊完成期末專題程式開發之同學, 另可獲得軟體系統發展分工整合及團隊合作的經驗. 
課程要求
1. 先修課程:無

2. 學期成績計算方式:
三次作業 30% + 期中考 20% + 期末考 20% + 期末專題程式成果之YouTube網站展演短片15% + 期末專題程式書面報告 15%

助教群可依同學與助教之互動表現(課內外討論, 每週所出不計分之練習題解完題數及解答品質等)酌加總分最多1.5分.

學期成績小數點以下無條件進位之後, 依學校規定方式由百分制轉為等第.

3. 作業
各次作業繳交日前,每位修課同學需自行依興趣選擇一個主題,撰寫程式及報告當成計分之作業,內容亦可配合期末專題,作為其先期嘗試或構成其一部份. 交來之作業須以書面介紹選擇題目之動機,構想解說,程式測試規畫, 流程圖(第4章介紹), 結構圖(第6, 7章介紹)或UML圖(第9章介紹), 程式列表, 程式測試執行結果,參考文獻, 學習心得等. 此外並需於規定時間內上傳口頭報告投影片至CEIBA網站.

同學若自修或向學長或助教學得超過課程進度之內容,並應用於自行實作完成之作業, 需敘明自修或討論學習過程於學習心得部份. 作業亦可利用其他既有之相關開放使用程式碼或無版權之軟體工具及網路上可公用之數據, 影音, 圖片等資料, 直接或修改後採用, 以完成同學構想之主題, 但需註明出處及修改應用之處, 且如此產生之程式碼部份在程式列表中應予省略.

作業每次每人繳交一份, 不可多人合交. 如為多人合作, 亦須分開撰寫不同內容.

4. 期末專題程式:
課程進行中, 修課同學(不包含旁聽學生)自組1至3人之團隊, 於規定日期由CEIBA上傳一頁之期末專題程式構想(不計分), 說明預定主題與選擇此一主題之動機, 及可能之實作方法.

團隊應盡早開始持續合作, 完成期末專題程式實作.每一團隊需以學術論文格式寫成一份書面報告, 比照正式學術報告格式撰寫, 包含摘要(Abstract), 緒論(Introduction), 本文(至少須涵括研究動機, 相關之課程章節, 文獻回顧, 理論說明, 實作流程架構, 研究過程,實作結果與討論, 並適當註明引用文獻及他人指導內容), 結論(Conclusions), 並適當註明引用文獻及他人指導內容),參考文獻
(References), 與學習心得等內容. 並需於規定期限內上傳成果解說展演視訊短片至YouTube網站.

專題程式實作可與學長或助教討論, 但必須由團隊本身完成.
亦可利用其他既有之相關開放使用程式碼或無版權之軟體工具及網路上可公用之數據, 影音, 圖片等資料,直接或修改後採用, 以完成團隊構想之主題, 但需於書面報告及投影片註明何處由何人協助完成,及修改或直接應用既有資源之部分與其出處.

團隊之期末專題解說展演視訊短片及書面報告成績均即為各團隊成員之期末專題程式展演與書面報告成績.

5. 評分為A+的作業將會公布於CEIBA網站, 供所有同學參考. 因此學習心得可以另外撰寫,其pdf檔與口頭報告及書面報告/作業檔案分開成兩個檔於ceiba分別繳交.
 
預期每週課後學習時數
 
Office Hours
另約時間 備註: 請以 email 約定時間 
指定閱讀
1. 鄭士康, 以C#學習程式設計基礎:使用Visual Studio 2012 Express for Windows Desktop, 2013. 1. 鄭士康, 以C#學習程式設計基礎:使用Visual Studio 2012 Express for Windows Desktop, 2013. (電子書, 與各章例題,練習題解答,及期中期末複習解答等構成完整講義, 共同壓縮成一個zip檔, Tutorial2016, NTU Space網址https://www.space.ntu.edu.tw/navigate/s/FBACCD53E0CE444CA0F803B0CC8F3E0AQQY ), 請同學自行下載.
有需要於上課及期中期末Open Book考試時參考紙本者, 加退選後及期中考後, 分上冊(即1~7章, 290頁), 與下冊( 8~13章, 478頁), 參加助教群揪團, 以印量取得較多折扣. 上述教科書雖是介紹Visual Studio 2012 Express for Windows Desk Top, 但基礎概念及內容仍可應用於本課程採用之Visual Studio Code.學生自行依學習進度閱讀。

2. 各章教學資料分基本教材(講義內容投影片, 講課影片中盡量依進度仔細講解), 補充教材(主要由同學課外學習, 講課影片中可能略作提示), 延伸學習教材(課外自修)三部分, 整合為一個XMind心智圖.xmind檔. 可於上課前由任課教師email通知之NTU Space網址下載. 同學請至https://actsmind.com/blog/ 下載安裝免費軟體XMind, 可開啟.xmind檔. 直接滑鼠雙按圖中的各種檔案圖標, 即可開啟各種教材檔案.
 
參考書目
網路上適合各種程度之各種學習資源,及市售C#入門與其他相關書籍,均可由同學依個別學習進度,自行搜尋閱讀參考。 
評量方式
(僅供參考)
 
No.
項目
百分比
說明
1. 
三次作業 
30% 
各次作業繳交日前,每位修課同學需自行依興趣選擇一個主題,撰寫程式及報告當成計分之作業,內容亦可配合期末專題,作為其先期嘗試或構成其一部份. 交來之作業須以書面介紹選擇題目之動機,構想解說,程式測試規畫, 流程圖(第4章介紹), 結構圖(第6, 7章介紹)或UML圖(第9章介紹), 程式列表, 程式測試執行結果,參考文獻, 學習心得等. 作業及學習心得外.另需準備由同樣內容整理,含標題頁之7張左右投影片ppt或pdf檔, 由CEIBA系統作業區上傳繳交. 同學若自修或向學長或助教學得超過課程進度之內容,並應用於自行實作完成之作業, 需敘明自修或討論學習過程於學習心得部份. 作業亦可利用其他既有之相關開放使用程式碼或無版權之軟體工具及網路上可公用之數據, 影音, 圖片等資料, 直接或修改後採用, 以完成同學構想之主題, 但需註明出處及修改應用之處, 且如此產生之程式碼部份在程式列表中應予省略. 作業每次每人繳交一份, 不可多人合交. 如為多人合作, 亦須分開撰寫不同內容. 作業每次由助教群輪一位助教批改, 任課教師抽驗. 評分要點為主題之創新性, 構想及動機之說明及相關圖形是否清楚, 程式測試規畫是否完整. 使用外部資源之外, 個人獨力完成的程式部份是否切題有創意, 註解是否清楚適當,程式是否簡潔易讀, 學習心得是否言之有物等. 作業以 A+ = 97, A = 92, A- = 87, B+ = 82, B = 77, B- = 72等評分, 缺交為0分,遲交依規定扣分. 作業須轉成pdf檔,由CEIBA系統作業區上傳繳交. 作業遲交時,成績先打九折,隨後自預定繳交日第一節開始上課時間算起, 每逾一日(24小時),該次作業成績乘以0.85一次. 若因另有要事無法出席作業討論者, 仍須於作業討論日上課第一節前上傳作業檔案. 評分為A+的作業將會公布於CEIBA網站, 供所有同學參考. 因此學習心得可以另外上傳. 作業繳交日第三節,輪流抽籤決定同學以其準備之投影片進行簡報. 亦歡迎旁聽同學繳交書面及投影片作業,並參加抽籤簡報. 作業討論抽到的修課同學若未事先請假, 又不在教室內, 作業成績先九五折, 隨後由抽到之時間至該同學出現或下課, 每十分鐘將該份作業成績乘以0.95一次. 若因另有要事無法出席作業討論者, 仍須於作業討論日上課第一節前上傳作業檔案. 並須與授課老師商量, 於適當時間進行作業簡報.  
2. 
期中考 
20% 
於學校規定期中考時間,在原教室舉行,時間為下午2:20至6:00,範圍為第一章至前一週進度. 考試為Open Book, 同學可攜帶任何紙本資料, 但不可攜帶使用各式電腦(Computer)或計算器(Calculator), 亦不能借閱他人所攜資料. 考試進行中禁止使用手機. 因不可抗力之原因無法應考者, 請盡早於考試前通知任課老師商討變通方法. 考試舉行過後, 方告知缺考原因者, 除確屬不可抗力原因並附證明者,可與任課老師商量變通方法外,考試成績以零分計算. 考試由任課教師協助TA命題, 與助教群共同監考, 各助教依參考解答, 亂數決定批改之題號(例如助教A改第3題, 助教B改第1, 2題, …).  
3. 
期末考 
20% 
於學校規定期末考時間,在原教室舉行,時間為下午2:20至6:00,範圍為期中考所考範圍之後的部分. 考試為Open Book, 同學可攜帶任何紙本資料, 但不可攜帶使用各式電腦(Computer)或計算器(Calculator), 亦不能借閱他人所攜資料. 考試進行中禁止使用手機. 因不可抗力之原因無法應考者, 請盡早於考試前通知任課老師商討變通方法. 考試舉行過後, 方告知缺考原因者, 除確屬不可抗力之原因無法應考並附證明者可與任課老師商量變通方法外, 考試成績以零分計算. 考試由任課教師協助TA命題, 與助教群共同監考, 各助教依任課教師提供之參考解答, 亂數決定批改之題號(例如助教A改第3題, 助教B改第1, 2題, …). 
4. 
期末專題實作展演視訊短片 
15% 
各團隊應完成期末專題實作, 並製作5分鐘左右解說展演視訊短片, 於 期末考後一週之間上傳YiouTube網站. 並在CEIBA網站作業區上傳YouTube網址(pdf檔). 同學互相就YouTube上的視訊短片評分. 展演視訊短片的同儕互評, 全部透過網路進行. 課程並沒有安排一個大家聚在一起簡報打分數的時間. 所以屆時不在學校的同學, 期末專題的互評成績不受影響. 每位修課同學為其他團隊作品評分時, 以1至5分評分,並鼓勵註記優缺點.自己團隊之作品則應予迴避不評分. 所評分數1至5分各分數所占人數應照屆時宣佈之規定比例分配, 不可全部打相同或均打少數特定分數. 各團隊之展演成績為其他同學評分截頭去尾後平均(x),換算得分為 70+5x, 未如期推出短片之團隊除有特殊原因外, 以0分計算. 若確因不可抗力原因致無法完成短片之團隊, 須附證明, 並於上傳截止日當晚12:00前以email通知任課老師, 安排適當時間向任課老師簡報, 並由任課教師評分. 如仍無法簡報者, 由團隊與任課老師商討變通方法.  
5. 
期末專題實作書面報告 
15% 
將書面報告及學習心得分別轉成pdf檔,由CEIBA系統繳交. 書面報告由任課老師協助TA主觀依照書面報告之整體表現, 以 A+ = 97, A = 92, A- = 87, B+ =82, B = 77, B- = 72 等評分, 缺交為0分. 不論原因, 遲交者成績打八折,6/29下午2:00後不再收補交之報告,該項成績為零分.  
6. 
助教評分  
1.5% 
助教群可依同學與助教之互動表現(課內外討論, 每週所出不計分之練習題解完題數及解答品質等)酌加總分最多1.5分. 
 
課程進度
週次
日期
單元主題
第1週
3/6  第1,2章: 課程背景及學習指引, 整合發展環境初步與簡易C#程式 
第2週
3/13  第3章: 實值變數與運算式 
第3週
3/20  第3,4章: 實值變數與運算式, 流程控制 
第4週
3/27  第4, 5章:流程控制, 陣列 
第5週
4/3  兒童節及民族掃墓節放假 
第6週
4/10  第5章:陣列, 第6章:函式 
第7週
4/17  第6章:函式, 第7章: 程式規劃與函式導向程式設計
繳交並討論第一次作業 
第8週
4/24  期中考, 範圍至前一週進度 
第9週
5/1  第7, 8章: 程式規劃與函式導向程式設計, 物件與類別 
第10週
5/8  第8章: 物件與類別 , 開始繳交分組名單及期末專題構想書 
第11週
5/15  第9章: 物件導向程式設計 
第12週
5/22  第10章 至 10.5: 繼承與多型 , 繳交及討論第二次作業 
第13週
5/29  第12章: 基礎視窗介面程式設計 
第14週
6/5  第10章 10.5節之後: 繼承與多型
繳交並討論第三次作業 
第15週
6/12  Unity 3D 電腦遊戲程式設計 
第16週
6/19  期末考 
第17週
6/26  6/26 端午節調整放假, 不上課. 但於
6/20~6/26期間, 各組應將期末專題實作成果解說展演視訊短片上傳, 由同儕依據各組短片評分; 過程在線上完成. 屆時不在台灣的同學,同儕互評成績不受影響.
專題書面報告及學習心得於6月26日下午2:00前於ceibaCEIBA網站分開繳交,任課教師評分。對其他組的評分表,則須於6月26日下午5:00前上傳繳交。 
第18週
7/3  檔案讀寫與例外處理 (學校規定彈性補充教學時間)